﻿namespace Vibstudio.NetConfigurator.Globalization
{
    using System.Collections.Generic;
    using System.Text;

    internal class GermanLabeler : ILabeler
    {
        public Label BackupFiles
        {
            get { return Label.Create("Dateien sichern?"); }
        }

        public Label ApplicationsFile
        {
            get { return Label.Create("Anwendungsdateien"); }
        }

        public Label ConfigurationsFile
        {
            get { return Label.Create("Konfigurationsdatei"); }
        }

        public Label ConfigurationFile
        {
            get { return Label.Create("Konfigurationsdatei"); }
        }

        public Label ChooseApplicationsPathToConfigure
        {
            get { return Label.Create("Wählen Sie den Basispfad der zu konfigurierenden Anwendungen"); }
        }

        public Label ChooseApplicationsPathToCompose
        {
            get { return Label.Create("Wählen Sie den Basispfad der zu komponieren Anwendungen"); }
        }

        public Label ChooseApplicationsPathToAutoCompose
        {
            get { return Label.Create("Wählen Sie den Basispfad der zu automatisc komponieren Anwendungen"); }
        }

        public Label RunConfiguration
        {
            get { return Label.Create("Führt die Konfiguration aus"); }
        }

        public Label RunComposition
        {
            get { return Label.Create("Führt die Komposition aus"); }
        }

        public Label GoToHome
        {
            get { return Label.Create("Zurück zur Startseite"); }
        }

        public Label ValidateUrl
        {
            get { return Label.Create("Validiert die URL"); }
        }

        public Label Application
        {
            get { return Label.Create("Anwendung"); }
        }

        public Label Configuration
        {
            get { return Label.Create("Konfiguration"); }
        }

        public Label Composition
        {
            get { return Label.Create("Komposition"); }
        }

        public Label Outcome
        {
            get { return Label.Create("Ergebnis"); }
        }

        public Label Message
        {
            get { return Label.Create("Nachricht"); }
        }

        public Label Url
        {
            get { return Label.Create("URL"); }
        }

        public Label ConfigurationMode
        {
            get { return Label.Create("Konfigurationsmodus"); }
        }

        public Label CompositionMode
        {
            get { return Label.Create("Kompositionsmodus"); }
        }

        public Label InvalidURI
        {
            get { return Label.Create("Ungültiger URI"); }
        }

        public Label RunAutoComposition
        {
            get { return Label.Create("Führt die automatische Komposition aus"); }
        }

        public Label SuccessfulConfiguration
        {
            get { return Label.Create("Konfiguration erfolgreich abgeschlossen"); }
        }

        public Label SuccessfulComposition
        {
            get { return Label.Create("Komposition erfolgreich abgeschlossen"); }
        }

        public Label SuccessfulValidation
        {
            get { return Label.Create("Validierung erfolgreich abgeschlossen"); }
        }

        public Label PartialConfiguration(int percentage)
        {
            return Label.Create(string.Format("Konfiguration teilweise erfolgt ({0}%)", percentage));
        }

        public Label PartialComposition(int percentage)
        {
            return Label.Create(string.Format("Komposition teilweise erfolgt ({0}%)", percentage));
        }

        public Label PartialValidaton(int percentage)
        {
            return Label.Create(string.Format("Validierung teilweise erfolgt ({0}%)", percentage));
        }

        public Label ConfigurationNotPerformed
        {
            get { return Label.Create("Konfiguration nicht erfolgt"); }
        }

        public Label CompositionNotPerformed
        {
            get { return Label.Create("Komposition nicht erfolgt"); }
        }

        public Label ValidationNotPerformed
        {
            get { return Label.Create("Validierung nicht erfolgt"); }
        }

        public Label OperationNotExecutable
        {
            get { return Label.Create("Operation kann nicht ausgeführt werden"); }
        }

        public Label DirectoryNotFound
        {
            get { return Label.Create("Verzeichnis nicht gefunden"); }
        }

        public Label FileNotFound(string fullPath)
        {
            return Label.Create(string.Format("File nicht gefunden '{0}'", fullPath));
        }

        public Label FileNotFoundInDirectory()
        {
            return Label.Create("File nicht im Verzeichnis gefunden");
        }

        public Label FileNotFoundInDirectory(string path)
        {
            return Label.Create(string.Format(@"File nicht im Verzeichnis gefunden ({0})",
                                              path));
        }

        public Label FileNotFoundInDirectory(string file, string path)
        {
            return Label.Create(string.Format(@"File nicht ({0}) im Verzeichnis gefunden ({1})",
                                              file,
                                              path));
        }

        public Label FileNotFoundInDirectory(string file, string rootPath, string folderName)
        {
            return Label.Create(string.Format(@"File nicht ({0}) im Verzeichnis gefunden ({1}\...\{2})",
                                              file,
                                              rootPath,
                                              folderName));
        }

        public Label FirstFileConfiguredSuccessfully(string path, int count)
        {
            return Label.Create(string.Format(@"'{0}', die erste der {1} gefundenen Dateien, erfolgreich konfiguriert",
                                              path,
                                              count));
        }

        public Label UnknownConfigurator(string configuratorName)
        {
            return
                Label.Create(string.Format("Konfigurator{0} unbekannt",
                                           string.IsNullOrEmpty(configuratorName)
                                               ? string.Empty
                                               : string.Format(" \"{0}\"", configuratorName)));
        }

        public Label UnknownComposer(string composerName)
        {
            return Label.Create(string.Format("Composer{0} unbekannt",
                                           string.IsNullOrEmpty(composerName)
                                               ? string.Empty
                                               : string.Format(" \"{0}\"", composerName)));
        }

        public Label AutocompositionAlreadyPerformed(string compositionName)
        {
            return Label.Create(string.Format("Komposition{0} bereits durchgeführt",
                                              string.IsNullOrEmpty(compositionName)
                                              ? string.Empty
                                              : string.Format(" \"{0}\"", compositionName)));
        }

        public Label ApplicationNotReference(string applicationName = "")
        {
            return Label.Create(string.Format("Die Anwendung{0} ist nicht die Referenzanwendung",
                                              string.IsNullOrEmpty(applicationName)
                                                  ? string.Empty
                                                  : string.Format(" \"{0}\"", applicationName)));
        }

        public Label CompositionPartiallyPerformed(IEnumerable<string> unconfiguredSettings)
        {
            var labelBuilder = new StringBuilder();

            labelBuilder.Append("Setting keys fehlen:");
            foreach (string setting in unconfiguredSettings)
            {
                labelBuilder.AppendFormat(" {0},", setting);
            }
            labelBuilder.Remove(labelBuilder.Length - 1, 1);

            return Label.Create(labelBuilder);
        }

        public Label BasePathNotSpecified
        {
            get { return Label.Create("Zu konfigurierender Basispfad der Anwendungen nicht angegeben"); }
        }
    }
}
